﻿using System;
namespace MMITCore.Abstract
{
    public interface ILogger<T> where T : class
    {
        void AddAdditionalInformation(Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry logEntry, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void AddAdditionalInformationAndWrite(Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry logEntry, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void AddPropertiesFromException(System.Collections.Generic.IDictionary<string, object> dictionary, Exception ex);
        string[] Categories { get; }
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry ConditionalCreateBaseLogEntry(int eventId, System.Diagnostics.TraceEventType severity);
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry ConditionalCreateBaseLogEntry(int eventId, System.Diagnostics.TraceEventType severity, int priority);
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry CreateBaseLogEntry(int eventId, System.Diagnostics.TraceEventType severity, int priority);
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry CreateLogEntry(int eventId, System.Diagnostics.TraceEventType severity, int priority, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry CreateLogEntry(int eventId, System.Diagnostics.TraceEventType severity, object message);
        Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry CreateLogEntry(int eventId, System.Diagnostics.TraceEventType severity, object message, System.Collections.Generic.IDictionary<string, object> properties);
        string Desc(object obj);
        System.Collections.Generic.Dictionary<string, object> ExtractPropertiesFromException(Exception ex);
        string InvokingAssemblyName { get; }
        System.Collections.Generic.IDictionary<string, object> LogProperties { get; set; }
        void Write(int eventId, System.Diagnostics.TraceEventType severity, Func<string> message);
        void Write(int eventId, System.Diagnostics.TraceEventType severity, int priority, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void Write(int eventId, System.Diagnostics.TraceEventType severity, int priority, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void Write(int eventId, System.Diagnostics.TraceEventType severity, int priority, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void Write(int eventId, System.Diagnostics.TraceEventType severity, object message);
        void Write(int eventID, string msg, System.Diagnostics.TraceEventType severity, Exception ex);
        void WriteCritical(int eventId, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteCritical(int eventId, Func<string> message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteCritical(int eventId, object message);
        void WriteCritical(int eventId, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteCritical(int eventId, object message, Exception ex);
        void WriteCritical(int eventId, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteError(int eventId, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteError(int eventId, Func<string> message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteError(int eventId, object message);
        void WriteError(int eventId, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteError(int eventId, object message, Exception ex);
        void WriteError(int eventId, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteInformation(int eventId, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteInformation(int eventId, Func<string> message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteInformation(int eventId, object message);
        void WriteInformation(int eventId, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteInformation(int eventId, object message, Exception ex);
        void WriteInformation(int eventId, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteVerbose(int eventId, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteVerbose(int eventId, Func<string> message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteVerbose(int eventId, object message);
        void WriteVerbose(int eventId, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteVerbose(int eventId, object message, Exception ex);
        void WriteVerbose(int eventId, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteWarning(int eventId, Func<string> message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteWarning(int eventId, Func<string> message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteWarning(int eventId, object message);
        void WriteWarning(int eventId, object message, System.Collections.Generic.IDictionary<string, object> properties);
        void WriteWarning(int eventId, object message, Exception ex);
        void WriteWarning(int eventId, object message, Exception ex, System.Collections.Generic.IDictionary<string, object> properties);
    }
}
